package com.wyix;

import com.wyix.entity.AbstractUser;
import com.wyix.entity.NormalUser;
import com.wyix.entity.Order;
import com.wyix.sercvice.MerchantService;
import com.wyix.sercvice.RiderService;
import com.wyix.sercvice.impl.FullTimeRider;
import com.wyix.sercvice.impl.RestaurantMerchant;

/**
 * @author wangdx
 * @since 2025/8/1
 */
public class FoodDeliveryApp {
    public static void main(String[] args) {
        // 1. 创建角色实例
        MerchantService restaurant = new RestaurantMerchant("M001", "香辣川菜馆", "川菜");
        RiderService rider = new FullTimeRider("R001", "张三");
        AbstractUser user = new NormalUser("U001", "李四"); // 普通用户（继承抽象用户类）

        // 2. 角色登录
        ((AbstractUser) restaurant).login(); // 调用抽象类的登录方法
        ((AbstractUser) rider).login();
        user.login();

        // 3. 创建订单并处理
        Order order = new Order("O12345", "麻婆豆腐", "科技园区A座");
        restaurant.acceptOrder(order); // 商家接单
        restaurant.prepareMeal(order); // 商家备餐
        restaurant.notifyRider(order, rider); // 商家通知骑手（调用接口默认方法）
        rider.deliverMeal(order); // 骑手送餐

        // 4. 输出角色信息（调用抽象类的角色描述方法）
        System.out.println("\n角色信息：");
        System.out.println(((RestaurantMerchant) restaurant).getRoleDesc());
        System.out.println(((FullTimeRider) rider).getRoleDesc());
        System.out.println(user.getRoleDesc());
    }
}